Introducción

Todo sistema en algún grado inteligente depende absolutamente de la realimentación que recibe de su entorno. Es decir, el funcionamiento correcto o incorrecto de los sensores que posea es crucial para su eficaz funcionamiento. Luego, es preciso calibrar aquellos sensores para conocer su comportamiento bajo distintas condiciones ambientales, y así obrar adecuadamente a la hora de diseñar el sistema que realizamos. Desafortunadamente, en el caso de los sensores ópticos (cámaras) ocurre que es complejo determinar de forma directa las variables de interés en la calibración (no son usualmente suministradas por el fabricante, adicionalmente, medirlas experimentalmente no es una tarea fácil). Sin embargo, usando modelos geométricos y matemáticos existentes, es posible obtener los parámetros de calibración de una cámara de forma indirecta. Este documento pretende ilustrar el modelo más sencillo que se concibe de una cámara, y luego demostrar el proceso de calbración usando la librería OpenCV (cuyas funciones se basan en el modelo mencionado).

El modelo pinhole

Este modelo de cámara consiste en un plano con una apertura puntual en su centro, sobre la que sólo puede pasar un rayo de luz. De esta manera, sólo un rayo que parta de algún punto específico del espacio puede entrar. Paralelo a este plano, existe otro plano, que es el que capturará los rayos proyectados, formándose así una imagen.

La distancia $f$ es conocida como distancia focal y $Z$ es la distancia entre cámara y objeto. Para simplificar los cálculos necesarios en la solución de el sistema coordenado de la anterior imagen, se reorganiza todo así:

El mapeo $f:\ Q \mapsto q$ corresponde a la siguiente función:

$$f\left(X,Y,Z\right) = \left(f_x\left(\frac{X}{Z}\right)+c_x,\ f_y\left(\frac{Y}{Z}\right)+c_y\right)$$

En donde, \begin{equation} \label{eq:mapx} x_{imagen} = f_x\left(\frac{X}{Z}\right)+c_x \end{equation} \begin{equation} \label{eq:mapy} y_{imagen} = f_y\left(\frac{Y}{Z}\right)+c_y \end{equation}

La figura ilustra lo que sería un modelo ideal, en que el plano de la imagen es paralelo al plano $\hat{i}\hat{j}$, y el eje $\hat{k}$ interseca al plano de la imagen en su centro. En la construcción de una cámara, lograr una alineación perfecta es imposible. Por ello, se introducen las variables $c_x$ y $c_y$, las cuales representan desplazamientos respectivamente horizontal y vertical del eje óptico respecto al centro del plano. También se introducen dos distancias focales, $f_x$ y $f_y$, debido a que los sensores ópticos no poseen pixeles cuadrados, en realidad son rectangulares.

Reorganizando las ecuaciones \ref{eq:mapx} y \ref{eq:mapy},

$$x_{imagen} Z = f_x X + c_x Z$$$$y_{imagen} Z = f_y Y + c_y Z$$

Es conveniente expresar estas ecuaciones de forma matricial usando coordenadas homogéneas, de la forma $q = MQ$, en donde

$q = \begin{bmatrix} x \\[0.3em] y \\[0.3em] w \end{bmatrix}$ , $M = \begin{bmatrix} f_x & 0 & c_x \\[0.3em] 0 & f_y & c_y \\[0.3em] 0 & 0 & 1 \end{bmatrix}$ , $Q = \begin{bmatrix} X \\[0.3em] Y \\[0.3em] Z \end{bmatrix}$

Distorsión de los lentes

Varios supuestos deben olvidarse, y reemplazarse por modelos, para poder llegar a una representación más precisa y generalizada. No se consideró previamente, pero los sensores ópticos de una cámara (CCDs, o dispositivos de carga acoplada, son los más ampliamente usados) poseen una alta integración en una área muy reducida, requieren de un lente para que la luz de una escena se enfoque en su superficie. Los lentes pueden ser fabricados y alineados con precisión excepcional, pero el efecto de distorsión que crean en la imagen puede perfectamente ser notado a simple vista.

Los tipos más comunes de distorsión en una cámara digital son distorsión radial y tangencial. La distorsión radial ocurre por la acción natural del lente de desviar los rayos de luz que están más alejados del centro de un lente. La distorsión tangencial ocurre la pérdida de paralelismo entre el plano del sensor y el plano del lente. Esto, entre otros efectos, causa que el centro de la imagen no coincida con el centro de la matriz CCD.

Se acostumbra modelar la distorsión radial con las siguientes ecuaciones:

$$x_{corregido} = x\left(1 + k_1r^2 + k_2r^4 + k_3r^6\right)$$$$y_{corregido} = y\left(1 + k_1r^2 + k_2r^4 + k_3r^6\right)$$

De la misma forma, la distorsión tangencial tiene un modelo convencional:

$$x_{corregido} = x + \left[ 2p_1y + p_2\left( r^2 + 2x^2 \right) \right]$$$$y_{corregido} = y + \left[ p_1\left( r^2 + 2y^2 \right) + 2p_2x \right]$$

En total, para realizar las correcciones necesarias en las imágenes se requieren cinco constantes (comúnmente llamadas parámetros intrínsecos, porque son intrínsecos o propios a la composición de la cámara). En corrección de distorsión radial, convencionalmente son suficientes $k_1$ y $k_2$; $k_3$ es usada especialmente en cámaras de alta distorsión, como las que poseen lentes ojo de pez. Por practicidad, OpenCV presenta todas las constantes en un vector $5 \times 1$ conteniendo en este orden: $k_1$, $k_2$, $p_1$, $p_2$ y $k_3$ (de tal forma que si no se requiere $k_3$, puede ser fácilmente excluída del vector).

Calibración

Los algoritmos que existen en la actualidad, y especialmente los implementados en OpenCV, consisten en poner un objeto en la escena de la cámara; la forma de dicho objeto debe estar caracterizada y debe tener un conjunto de puntos identificables. Al observar este conjunto de puntos en varias perspectivas, es posible obtener los parámetros intrínsecos de la cámara y parámetros de posición del objeto relativa a la cámara (conocidos como parámetros extrínsecos, porque si bien caracterizan a la cámara, son externos a ella). Esto es realizado a través de proyecciones del objeto de calibración y estimación de las coordenadas homogéneas de cada punto obtenido del objeto.

En principio, se puede usar cualquier objeto que esté bien caracterizado, cuyos puntos en el espacio sean conocidos. A menudo se usan figuras tridimensionales (una caja con puntos en sus caras, por ejemplo), pero un patrón plano de tablero de ajedrez es más conveniente, por las siguientes razones:

  • Objetos bidimensionales son más fáciles de crear en software, e igualmente más fáciles de operar.
  • El patrón alternado de cuadrados blancos y negros establece la imparcialidad en las medidas, es decir, no permite la preferencia sobre ninguna dirección en el espacio.
  • Las esquinas resultantes tienden a ser fácilmente ubicadas bajo métodos de localización subpixel.

OpenCV recibe el número interno de esquinas de un patrón, de tal manera que el tamaño tablero de ajedrez común y corriente ($8 \times 8$ cuadrados) es de $7 \times 7$ esquinas. No se acostumbra a usar patrones cuadrados, porque para resolver su posición no se encuentra solución única (debido a que tienen más de un eje de simetría).

Algoritmo de calibración


In [ ]: